package Bank;

/*
* File:    GestorCuentas.java
* Coms:    Monitor que implementa las funciones básicas de un banco
*/

/**
 * @author Daniel Cabrera Ebana - 686013
 * @author Alberto Sanchez Romero - 662385
 */

import java.util.Hashtable;


public class GestorCuentas {
	//Tabla Hash que simula una base de datos(VISA,SALDO)
	private Hashtable<String, Integer> tablaVisa = new Hashtable<String, Integer>();
	
	private int VISA = 100000;

	/**
	 * Constructor del monitor
	 */
	public GestorCuentas() {}

	/**
	 * Añadir un nuevo cliente
	 * @param visa identificador único del cliente
	 * @param saldo dinero a añadir en la cuenta
	 */
	synchronized void addCliente(String visa,int saldo) {
		tablaVisa.put(visa, saldo);
	}

	/**
	 * Devuelve el saldo de un cliente
	 * @param visa del cliente para la consulta
	 * @return saldo del cliente
	 */
	synchronized int getSaldo(String visa) {
		return tablaVisa.get(visa);
	}

	/**
	 * Resta el saldo pasado por parametro a la cuenta
	 * @param visa del cliente para la consulta
	 * @param importe a descontar
	 */
	synchronized void restarSaldo(String visa,int importe) {
		tablaVisa.put(visa, tablaVisa.get(visa)-importe);
	}
	
	/**
	 * Generar una nueva VISA para un nuevo cliente
	 * @return VISA creada
	 */
	synchronized String generarVisa(){
		VISA ++;
		return "" + VISA;
	}
	/**
	 * Comprobar que una VISA existe y que dispone de saldo
	 * @param visa a comprobar
	 * @param saldo 
	 * @return 1 = existe la visa y dispone del saldo, 0 = no dispone del saldo, -1 = no existe la visa
	 */
	synchronized String comprobarVisaSaldo(String visa, int saldo){
		String respuesta = "";
		if(tablaVisa.containsKey(visa)){
			if(saldo <= tablaVisa.get(visa)){
				respuesta = "1";
			}else{
				respuesta = "0";
			}
		}else{
			respuesta = "-1";
		}
		return respuesta;
	}
}
